package com.dp.client.views.estadoPaquete;

import java.util.List;

import com.dp.client.dto.EstadoPaqueteDTO;
import com.dp.client.servicios.estadopaquete.IServiciosEstadoPaquete;
import com.dp.client.servicios.estadopaquete.IServiciosEstadoPaqueteAsync;
import com.dp.client.util.Alerts;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class EstadoPaquetePrincipal extends Composite 
{
	private FlexTable estadoPaqueteTable;

	public EstadoPaquetePrincipal() 
	{
		CaptionPanel upperPanel = new CaptionPanel();
		upperPanel.setCaptionText("EstadoPaquete");
		
		initWidget(upperPanel);
		upperPanel.setSize("auto", "auto");
		VerticalPanel verticalPanel = new VerticalPanel();
		upperPanel.add(verticalPanel);
		
		CaptionPanel cptnpnlNewPanel = new CaptionPanel("");
		verticalPanel.add(cptnpnlNewPanel);
		
		VerticalPanel verticalPanel_1 = new VerticalPanel();
		cptnpnlNewPanel.setContentWidget(verticalPanel_1);
		verticalPanel_1.setSize("100%", "3cm");
		
		HorizontalPanel horizontalPanel_2 = new HorizontalPanel();
		verticalPanel_1.add(horizontalPanel_2);
		
		Button btnCrearNuevo = new Button("Crear nuevo");
		horizontalPanel_2.add(btnCrearNuevo);
		
		Button btnRefrescar = new Button("Refrescar");
		btnRefrescar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				refrescarTabla();
			}
		});
		horizontalPanel_2.add(btnRefrescar);
		btnCrearNuevo.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				EstadoPaqueteDialog estadoPaqueteDialog = new EstadoPaqueteDialog(null);
				
				estadoPaqueteDialog.center();
				estadoPaqueteDialog.addCloseHandler(new CloseHandler<PopupPanel>() {
					@Override
					public void onClose(CloseEvent<PopupPanel> event) {
						refrescarTabla();
					}
				});
			}
		});
		
		estadoPaqueteTable = new FlexTable();
		verticalPanel_1.add(estadoPaqueteTable);
		estadoPaqueteTable.setWidth("100%");
		
		Label lblCodigo_1 = new Label("Codigo");
		estadoPaqueteTable.setWidget(0, 0, lblCodigo_1);
		
		Label lblNombre = new Label("Descripcion");
		estadoPaqueteTable.setWidget(0, 1, lblNombre);
		
		//init
		refrescarTabla();
	}

		private void refrescarTabla(){
			IServiciosEstadoPaqueteAsync serviciosestadoPaquete = GWT.create(IServiciosEstadoPaquete.class);
			serviciosestadoPaquete.listEstadoPaquete(new AsyncCallback<List<EstadoPaqueteDTO>>() {
				
				@Override
				public void onSuccess(List<EstadoPaqueteDTO> result) {
					setTablaestadoPaquete(result);
				}
				
				@Override
				public void onFailure(Throwable caught) {
					Alerts.dialogErrorConexion();
				}
			});
		}
		private void setTablaestadoPaquete(List<EstadoPaqueteDTO> estadoPaquetes){
			while(estadoPaqueteTable.getRowCount() > 1) estadoPaqueteTable.removeRow(1);
			for(final EstadoPaqueteDTO estadoPaquete : estadoPaquetes){
				
				int row = estadoPaqueteTable.getRowCount();
				
				final int id = estadoPaquete.getId();
				estadoPaqueteTable.setText(row, 0, "" + estadoPaquete.getId());
				estadoPaqueteTable.setText(row, 1, estadoPaquete.getDescripcion());
				HorizontalPanel hor = new HorizontalPanel();
				hor.add(new Button("Info", new ClickHandler(){
					public void onClick(ClickEvent event) {
						//muestra info;
					}
				}));
				hor.add(new Button("Modificar", new ClickHandler(){
					public void onClick(ClickEvent event) {
						EstadoPaqueteDialog estadoPaqueteDialog = new EstadoPaqueteDialog(estadoPaquete);
						estadoPaqueteDialog.center();
						estadoPaqueteDialog.addCloseHandler(new CloseHandler<PopupPanel>() {
							@Override
							public void onClose(CloseEvent<PopupPanel> event) {
								refrescarTabla();
							}
						});
					}
				}));
				hor.add(new Button("Eliminar", new ClickHandler(){
					public void onClick(ClickEvent event) {
						IServiciosEstadoPaqueteAsync serviciosEstadoPaquete = GWT.create(IServiciosEstadoPaquete.class);
						serviciosEstadoPaquete.eliminarEstadoPaquete(id, new AsyncCallback<Boolean>() {
							
							@Override
							public void onSuccess(Boolean result) {
								Alerts.dialogExitoEliminacionDeObjeto("estadoPaquete");
								refrescarTabla();
							}
							
							@Override
							public void onFailure(Throwable caught) {
								Alerts.dialogErrorConexion();
							}
						});
					}
				}));
				estadoPaqueteTable.setWidget(row, 7, hor);
			}
		}
}
